package com.aasa.siccosap.pagonet.dao;

import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.apache.log4j.Logger;

import oracle.jdbc.OracleTypes;

import com.aasa.siccosap.pagonet.bean.Documento;
import com.aasa.siccosap.pagonet.bean.ReciboIngresoCaja;
import com.aasa.siccosap.util.Constantes;

public class OperacionPagoDaoExt {

	private Connection objpv_conexion = null;
	private CallableStatement objpv_cstmt = null;
	private ResultSet objpv_rs = null;
	private static String strl_paquete = "PGNETPK_PAGOS";
	// private static String strl_paquete="PGNETPK_PAGOS_PRUEBAS";

	static Logger logger = Logger.getLogger(OperacionPagoDaoExt.class);

	public OperacionPagoDaoExt(Connection objl_conexion) {
		this.objpv_conexion = objl_conexion;
	}

	public ReciboIngresoCaja ingresarCaja(ReciboIngresoCaja objl_RIC)
			throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin "
				+ strl_paquete
				+ ".PGNETSP_INGRESAR_A_CAJA(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		// String strl_storedProcedure =
		// "begin PGNETPK_PAGOS.PGNETSP_INGRESAR_A_CAJA(?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			configuraParametrosIngresoCaja(objl_RIC);
			this.objpv_cstmt.execute();
			strl_mensaje = (String) objpv_cstmt.getObject(1);
			// System.out.println("MSJ: "+strl_mensaje);
			if (strl_mensaje.trim().toUpperCase()
					.endsWith(Constantes.NO_ERRORS)) {
				// System.out.println("DATOS RIC OBTENIDOS: "+objpv_cstmt.getInt(2)+" "+objpv_cstmt.getInt(3)+" "+objpv_cstmt.getObject(4)+" "+objpv_cstmt.getObject(5)+" "+objpv_cstmt.getObject(6));
				objl_RIC.setIntpv_numeroRIC((Integer) objpv_cstmt.getInt(2));// sig
				// de
				// ric
				objl_RIC.setIntpv_detalleRIC((Integer) objpv_cstmt.getInt(3));// sig
				// de
				// ric_dets
				objl_RIC.setStrpv_numSecuenciaRICD((String) objpv_cstmt
						.getObject(4));// numero (el unico)
				objl_RIC.setObjpv_tipoCambioDetalle((BigDecimal) objpv_cstmt
						.getObject(5));
				objl_RIC.setStrpv_fechaDeposito((String) objpv_cstmt
						.getObject(6));
			} else {
				throw new Exception(strl_mensaje);
			}
		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - ingresarCaja", e);
			e.printStackTrace();
			// throw new Exception(Constantes.MENSAJE_ERROR_BD);
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
		return objl_RIC;
	}

	public void verificarReciboCobranza(List<Documento> objl_listaDocumento,
			String strl_fecha) throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin " + strl_paquete
				+ ".PGNETSP_VERIFICAR_RC(?,?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			for (Documento objl_doc : objl_listaDocumento) {
				configuraParametrosVerficarReciboCobranza(objl_doc, strl_fecha);
				this.objpv_cstmt.execute();
				strl_mensaje = (String) objpv_cstmt.getObject(1);
				// System.out.println("MSJ: "+strl_mensaje);
				if (!(strl_mensaje.trim().toUpperCase()
						.endsWith(Constantes.NO_ERRORS))) {
					throw new Exception(strl_mensaje);
				}

			}

		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - verificarReciboCobranza",
					e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
	}

	public Documento generarCabeceraRC(Documento objl_doc) throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin " + strl_paquete
				+ ".PGNETSP_GENERAR_CAB_RC(?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			configuraParametrosCabReciboCobranza(objl_doc);
			this.objpv_cstmt.execute();
			strl_mensaje = (String) objpv_cstmt.getObject(1);
			// System.out.println("MSJ: "+strl_mensaje);
			if (strl_mensaje.trim().toUpperCase()
					.endsWith(Constantes.NO_ERRORS)) {
				// System.out.println("MSJ2 RC: "+objpv_cstmt.getObject(2)+" "+objpv_cstmt.getObject(3)+" "+objpv_cstmt.getObject(4));
				objl_doc
						.setStrpv_numGenerado((String) objpv_cstmt.getObject(2));
				objl_doc.setStrpv_empresaPersonal((String) objpv_cstmt
						.getObject(3));
				objl_doc.setStrpv_regionPersonal((String) objpv_cstmt
						.getObject(4));

			} else {
				throw new Exception(strl_mensaje);
			}
		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - generarCabeceraRC", e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
		return objl_doc;
	}

	public void generarDetalleRC(Documento objl_cabeceraRC,
			List<Documento> objl_listaDocumento, String strl_codMonOpe)
			throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin "
				+ strl_paquete
				+ ".PGNETSP_GENERAR_DET_RC(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			for (Documento objl_doc : objl_listaDocumento) {
				configuraParametrosDetReciboCobranza(objl_doc, objl_cabeceraRC,
						strl_codMonOpe);
				this.objpv_cstmt.execute();
				strl_mensaje = (String) objpv_cstmt.getObject(1);
				// System.out.println("MSJ: "+strl_mensaje);
				if (!(strl_mensaje.trim().toUpperCase()
						.endsWith(Constantes.NO_ERRORS))) {
					throw new Exception(strl_mensaje);
				}

			}
		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - generarDetalleRC", e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}

	}

	public void aplicarSaldosFavor(ReciboIngresoCaja objl_RIC,
			List<Documento> objl_listaDocumento) throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin "
				+ strl_paquete
				+ ".PGNETSP_APLICAR_SALDOS_FAVOR(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			for (Documento objl_doc : objl_listaDocumento) {
				configuraParametrosAplicacion(objl_doc, objl_RIC);
				this.objpv_cstmt.execute();
				strl_mensaje = (String) objpv_cstmt.getObject(1);
				if (!(strl_mensaje.trim().toUpperCase()
						.endsWith(Constantes.NO_ERRORS))) {
					throw new Exception(strl_mensaje);
				}

			}
		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - aplicarSaldosFavor", e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}

	}

	public void aplicarSaldosFavorCAASA(ReciboIngresoCaja objl_RIC,
			Documento objl_documento) throws Exception {
		String strl_mensaje = null;

		String strl_storedProcedure = "begin "
				+ strl_paquete
				+ ".PGNETSP_APLICAR_SALDOS_FAVOR(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);

			configuraParametrosAplicacionCAASA(objl_documento, objl_RIC);
			this.objpv_cstmt.execute();
			strl_mensaje = (String) objpv_cstmt.getObject(1);
			objl_RIC
					.setObjpv_saldoDeuda((BigDecimal) objpv_cstmt.getObject(28));
			objl_RIC.setObjpv_saldoAnticipo((BigDecimal) objpv_cstmt
					.getObject(29));
			// System.out.println("saldo_deuda: " +
			// objl_RIC.getObjpv_saldoDeuda()
			// + "saldo_anticipo: " + objl_RIC.getObjpv_saldoAnticipo());
			if (!(strl_mensaje.trim().toUpperCase()
					.endsWith(Constantes.NO_ERRORS))) {
				throw new Exception(strl_mensaje);
			}

		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - aplicarSaldosFavorCAASA",
					e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}

	}

	public Documento cancelarReciboCobranza(Documento objl_doc)
			throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin " + strl_paquete
				+ ".PGNETSP_CANCELAR_CAB_RC(?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			cancelarRC(objl_doc);
			this.objpv_cstmt.execute();
			strl_mensaje = (String) objpv_cstmt.getObject(1);
			// System.out.println("MSJ: "+strl_mensaje);
			if (strl_mensaje.trim().toUpperCase()
					.endsWith(Constantes.NO_ERRORS)) {
			} else {
				throw new Exception(strl_mensaje);
			}
		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - cancelarReciboCobranza",
					e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
		return objl_doc;
	}

	public ReciboIngresoCaja ingresarCajaNC(ReciboIngresoCaja objl_RIC)
			throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin "
				+ strl_paquete
				+ ".PGNETSP_INGRESAR_CAJA_NC(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";

		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			configuraParametrosIngresoCajaNC(objl_RIC);
			this.objpv_cstmt.execute();
			strl_mensaje = (String) objpv_cstmt.getObject(1);
			// System.out.println("MSJ: "+strl_mensaje);
			if (strl_mensaje.trim().toUpperCase()
					.endsWith(Constantes.NO_ERRORS)) {
				// System.out.println("DATOS RIC NC OBTENIDOS: "+objpv_cstmt.getInt(2)+" "+objpv_cstmt.getInt(3)+" "+objpv_cstmt.getObject(4)+" "+objpv_cstmt.getObject(5)+" "+objpv_cstmt.getObject(6)+" "+objpv_cstmt.getObject(16)+" "+objpv_cstmt.getObject(17)+" "+objpv_cstmt.getObject(18)+" "+objpv_cstmt.getObject(19));
				objl_RIC.setIntpv_numeroRIC((Integer) objpv_cstmt.getInt(2));// sig
				// de
				// ric
				objl_RIC.setIntpv_detalleRIC((Integer) objpv_cstmt.getInt(3));// sig
				// de
				// ric_dets
				objl_RIC.setStrpv_numSecuenciaRICD((String) objpv_cstmt
						.getObject(4));// numero (del documento)
				objl_RIC.setObjpv_tipoCambioDetalle((BigDecimal) objpv_cstmt
						.getObject(5));
				objl_RIC.setStrpv_fechaDeposito((String) objpv_cstmt
						.getObject(6));
				objl_RIC.setObjpv_importePagadoSol((BigDecimal) objpv_cstmt
						.getObject(16));// importes ingresados a caja
				objl_RIC.setObjpv_importePagadoDol((BigDecimal) objpv_cstmt
						.getObject(17));
				objl_RIC.setStrpv_serie((String) objpv_cstmt.getObject(19));
				// el atributo secunicoric tiene el mismo valor q
				// numSecuenciaRICD,este ya vino con ese valor
				objl_RIC.setIntpv_flagCaja(objpv_cstmt.getInt(18));// (Integer)
			} else {
				throw new Exception(strl_mensaje);
			}
		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - ingresarCajaNC", e);
			e.printStackTrace();
			// throw new Exception(Constantes.MENSAJE_ERROR_BD);
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
		return objl_RIC;
	}

	public void cancelarDetReciboCobranza(List<Documento> objl_listaDocumento,
			Documento objl_cabecera) throws Exception {
		String strl_mensaje = null;
		String strl_storedProcedure = "begin " + strl_paquete
				+ ".PGNETSP_CANCELAR_DET_RC(?,?,?,?,?,?,?,?,?,?,?); end;";
		try {
			this.objpv_cstmt = this.objpv_conexion
					.prepareCall(strl_storedProcedure);
			for (Documento objl_doc : objl_listaDocumento) {
				configurarCancelarDetalleRC(objl_doc, objl_cabecera);
				this.objpv_cstmt.execute();
				strl_mensaje = (String) objpv_cstmt.getObject(1);
				// System.out.println("MSJ: "+strl_mensaje);
				if (!(strl_mensaje.trim().toUpperCase()
						.endsWith(Constantes.NO_ERRORS))) {
					throw new Exception(strl_mensaje);
				}

			}

		} catch (Exception e) {
			logger.error(
					"Error OperacionPagoDaoExt - cancelarDetReciboCobranza", e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
	}

	public String obtenerFechaProceso() throws Exception {
		// this.av_message = null;
		String strl_function = "{? = call PGNETPK_CONSULTAS.PGNETSF_OBTENER_FEC_PROCESO}";
		String strl_fechaProceso = "";
		try {

			this.objpv_cstmt = this.objpv_conexion.prepareCall(strl_function);
			configuraParametrosObtenerFechaProceso();
			this.objpv_cstmt.execute();
			strl_fechaProceso = this.objpv_cstmt.getString(1);

			// this.conn.commit();

		} catch (Exception e) {
			logger.error("Error OperacionPagoDaoExt - obtenerFechaProceso", e);
			e.printStackTrace();
			throw new Exception(e.getMessage());
		} finally {
			objpv_cstmt.close();
			objpv_cstmt = null;
		}
		return strl_fechaProceso;
	}

	public String ingresarDocumentoCorrelativo(
			List<Documento> objl_listaDocumento) throws Exception {
		logger.info("[ingresarDocumentoCorrelativo] << ENTER");
		PreparedStatement pstmt = null;
		Integer iTemp = 0;
		Integer TypeStore = 0;
		// String strl_insert =
		// "INSERT INTO DOCU_CORRELATIVO VALUES ( ? , ?  ) ";
		// String strl_update =
		// "UPDATE DOCU_CORRELATIVO SET COUNT_DOC = ? WHERE NUM_DOC = ? ";
		String strl_storedProcedure = "begin PGNETPK_CONSULTAS.PGNETSP_GENERAR_DOC_COUNT(?,?,?); end;";
		try {
			for (Documento objl_doc : objl_listaDocumento) {

				PagoNetDao pgnetDao = new PagoNetDao();
				iTemp = pgnetDao.obtenerCorrelativoDocumento(objl_doc
						.getStrpv_numeroPagonet());
				this.objpv_cstmt = this.objpv_conexion
						.prepareCall(strl_storedProcedure);

				TypeStore = (iTemp == 0) ? 1 : 2;

				iTemp++;
				objpv_cstmt.setString(1, objl_doc.getStrpv_numeroPagonet());
				objpv_cstmt.setInt(2, iTemp);
				objpv_cstmt.setInt(3, TypeStore);
				this.objpv_cstmt.execute();
				logger.info("Num doc -> " + objl_doc.getStrpv_numeroPagonet()
						+ " / contador -> " + iTemp);
			}
		} catch (Exception e) {
			logger.error("[ingresarDocumentoCorrelativo] Ex* ", e);
			e.printStackTrace();
		} finally {
			this.objpv_cstmt.close();
			pstmt = null;
		}

		logger.info("[ingresarDocumentoCorrelativo] >> EXIT");
		return "";
	}

	private CallableStatement configuraParametrosObtenerFechaProceso()
			throws SQLException {
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosIngresoCaja(
			ReciboIngresoCaja objl_RIC) throws SQLException {
		// System.out.println("fecha "+objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(2, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(3, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(4, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(5, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(6, OracleTypes.VARCHAR);

		StringBuffer debug = new StringBuffer();
		debug.append("configuraParametrosIngresoCaja entrada: ");
		debug.append(" 7: " + objl_RIC.getStrpv_codEmpresa());
		debug.append(",8: " + objl_RIC.getStrpv_codRegion());
		debug.append(",9: " + objl_RIC.getStrpv_fechaLiquidacion());
		debug.append(",10: " + objl_RIC.getStrpv_codCajeroEmp());
		debug.append(",11: " + objl_RIC.getStrpv_codCajeroDis());
		debug.append(",12: " + objl_RIC.getStrpv_codCajeroPer());
		debug.append(",13: " + objl_RIC.getStrpv_codCobradorEmp());
		debug.append(",14: " + objl_RIC.getStrpv_codCobradorDis());
		debug.append(",15: " + objl_RIC.getStrpv_codCobradorPer());
		debug.append(",16: " + objl_RIC.getStrpv_codCliente());
		debug.append(",17: " + objl_RIC.getStrpv_codTipoDoc());
		debug.append(",18: " + objl_RIC.getStrpv_serie());
		debug.append(",19: " + objl_RIC.getStrpv_secUnicoRIC());
		debug.append(",20: " + objl_RIC.getObjpv_importePagado());
		debug.append(",21: " + objl_RIC.getStrpv_codMoneda());
		debug.append(",22: " + objl_RIC.getStrpv_codBanco());
		debug.append(",23: " + objl_RIC.getStrpv_codCuenta());

		// System.out.println(debug.toString());

		objpv_cstmt.setString(7, objl_RIC.getStrpv_codEmpresa());
		objpv_cstmt.setString(8, objl_RIC.getStrpv_codRegion());
		objpv_cstmt.setString(9, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setString(10, objl_RIC.getStrpv_codCajeroEmp());
		objpv_cstmt.setString(11, objl_RIC.getStrpv_codCajeroDis());
		objpv_cstmt.setString(12, objl_RIC.getStrpv_codCajeroPer());
		objpv_cstmt.setString(13, objl_RIC.getStrpv_codCobradorEmp());
		objpv_cstmt.setString(14, objl_RIC.getStrpv_codCobradorDis());
		objpv_cstmt.setString(15, objl_RIC.getStrpv_codCobradorPer());
		objpv_cstmt.setString(16, objl_RIC.getStrpv_codCliente());
		objpv_cstmt.setString(17, objl_RIC.getStrpv_codTipoDoc());
		objpv_cstmt.setString(18, objl_RIC.getStrpv_serie());
		objpv_cstmt.setString(19, objl_RIC.getStrpv_secUnicoRIC());
		objpv_cstmt.setBigDecimal(20, objl_RIC.getObjpv_importePagado());
		objpv_cstmt.setString(21, objl_RIC.getStrpv_codMoneda());
		objpv_cstmt.setString(22, objl_RIC.getStrpv_codBanco());
		objpv_cstmt.setString(23, objl_RIC.getStrpv_codCuenta());

		/*
		 * objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		 * objpv_cstmt.registerOutParameter(2, OracleTypes.NUMBER);
		 * objpv_cstmt.setString(3, objl_RIC.getStrpv_fechaLiquidacion());
		 */
		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosIngresoCajaNC(
			ReciboIngresoCaja objl_RIC) throws SQLException {
		// System.out.println("fecha "+objl_RIC.getStrpv_fechaLiquidacion());

		StringBuffer debug = new StringBuffer();
		debug.append("configuraParametrosIngresoCajaNC entrada: ");
		debug.append(" 7: " + objl_RIC.getStrpv_codEmpresa());
		debug.append(",8: " + objl_RIC.getStrpv_codRegion());
		debug.append(",9: " + objl_RIC.getStrpv_fechaLiquidacion());

		debug.append(",10: " + objl_RIC.getStrpv_codCliente());
		debug.append(",11: " + objl_RIC.getStrpv_codTipoDoc());
		debug.append(",12: " + objl_RIC.getStrpv_serie());
		debug.append(",13: " + objl_RIC.getStrpv_secUnicoRIC());
		debug.append(",14: " + objl_RIC.getObjpv_importePagado());
		debug.append(",15: " + objl_RIC.getStrpv_codMoneda());

		// System.out.println(debug.toString());

		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(2, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(3, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(4, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(5, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(6, OracleTypes.VARCHAR);

		objpv_cstmt.setString(7, objl_RIC.getStrpv_codEmpresa());
		objpv_cstmt.setString(8, objl_RIC.getStrpv_codRegion());
		objpv_cstmt.setString(9, objl_RIC.getStrpv_fechaLiquidacion());

		objpv_cstmt.setString(10, objl_RIC.getStrpv_codCliente());
		objpv_cstmt.setString(11, objl_RIC.getStrpv_codTipoDoc());
		objpv_cstmt.setString(12, objl_RIC.getStrpv_serie());
		objpv_cstmt.setString(13, objl_RIC.getStrpv_secUnicoRIC());
		objpv_cstmt.setBigDecimal(14, objl_RIC.getObjpv_importePagado());
		objpv_cstmt.setString(15, objl_RIC.getStrpv_codMoneda());
		objpv_cstmt.registerOutParameter(16, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(17, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(18, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(19, OracleTypes.VARCHAR);

		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosVerficarReciboCobranza(
			Documento objl_doc, String strl_fecha) throws SQLException {
		StringBuffer salida = new StringBuffer();
		salida.append("configuraParametrosVerficarReciboCobranza : entrada ");
		salida.append(" 2: " + objl_doc.getStrpv_codigoEmpresa());
		salida.append(",3: " + objl_doc.getStrpv_codigoRegion());
		salida.append(",4: " + objl_doc.getStrpv_codigoTipoDocumento());
		salida.append(",5: " + objl_doc.getStrpv_serieLogica());
		salida.append(",6: " + objl_doc.getStrpv_numeroLogico());
		salida.append(",7: " + strl_fecha);
		// System.out.println(salida.toString());
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.setString(2, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(3, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(4, objl_doc.getStrpv_codigoTipoDocumento());
		objpv_cstmt.setString(5, objl_doc.getStrpv_serieLogica());
		objpv_cstmt.setString(6, objl_doc.getStrpv_numeroLogico());
		objpv_cstmt.setString(7, strl_fecha);

		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosCabReciboCobranza(
			Documento objl_doc) throws SQLException {
		StringBuffer salida = new StringBuffer();
		salida.append("configuraParametrosCabReciboCobranza : entrada ");
		salida.append(" 5: " + objl_doc.getStrpv_codigoEmpresa());
		salida.append(",6: " + objl_doc.getStrpv_codigoRegion());
		salida.append(",7: " + objl_doc.getStrpv_codigoTipoDocumentoAux());
		salida.append(",8: " + objl_doc.getStrpv_serieAux());
		salida.append(",9: " + objl_doc.getStrpv_fechaEmision());

		salida.append(",10: " + objl_doc.getStrpv_codigoCliente());
		salida.append(",11: " + objl_doc.getStrpv_cobrador());

		salida.append(",12: " + objl_doc.getStrpv_codigoTipoDocumento());
		salida.append(",13: " + objl_doc.getStrpv_serieLogica());
		salida.append(",14: " + objl_doc.getStrpv_numeroLogico());

		// System.out.println(salida.toString());
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(2, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(3, OracleTypes.VARCHAR);
		objpv_cstmt.registerOutParameter(4, OracleTypes.VARCHAR);
		objpv_cstmt.setString(5, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(6, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(7, objl_doc.getStrpv_codigoTipoDocumentoAux());
		objpv_cstmt.setString(8, objl_doc.getStrpv_serieAux());
		objpv_cstmt.setString(9, objl_doc.getStrpv_fechaEmision());
		objpv_cstmt.setString(10, objl_doc.getStrpv_codigoCliente());
		objpv_cstmt.setString(11, objl_doc.getStrpv_cobrador());
		objpv_cstmt.setString(12, objl_doc.getStrpv_codigoTipoDocumento());
		objpv_cstmt.setString(13, objl_doc.getStrpv_serieLogica());
		objpv_cstmt.setString(14, objl_doc.getStrpv_numeroLogico());

		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosDetReciboCobranza(
			Documento objl_doc, Documento objl_cabeceraRC, String strl_codMonOpe)
			throws SQLException {
		// System.out.println("importe "+objl_doc.getObjpv_importePagar());

		StringBuffer salida = new StringBuffer();
		salida.append("configuraParametrosDetReciboCobranza : entrada ");
		salida.append(" 2: " + objl_cabeceraRC.getStrpv_codigoEmpresa());
		salida.append(",3: " + objl_cabeceraRC.getStrpv_codigoRegion());
		salida.append(",4: "
				+ objl_cabeceraRC.getStrpv_codigoTipoDocumentoAux());
		salida.append(",5: " + objl_cabeceraRC.getStrpv_serieAux());
		salida.append(",6: " + objl_cabeceraRC.getStrpv_numGenerado());
		salida.append(",7 :" + objl_cabeceraRC.getStrpv_fechaEmision());

		salida.append(",8: " + objl_doc.getStrpv_codigoEmpresa());
		salida.append(",9: " + objl_doc.getStrpv_codigoRegion());
		salida.append(",10: " + objl_doc.getStrpv_codigoTipoDocumento());
		salida.append(",11: " + objl_doc.getStrpv_serieLogica());
		salida.append(",12: " + objl_doc.getStrpv_numeroLogico());

		salida.append(",13: " + objl_doc.getStrpv_codigoMoneda());
		salida.append(",14:" + objl_doc.getObjpv_importe());
		salida.append(",15: " + objl_cabeceraRC.getStrpv_codigoCliente());
		salida.append(",16: " + objl_cabeceraRC.getStrpv_cobrador());
		salida.append(",17: " + objl_cabeceraRC.getStrpv_empresaPersonal());

		salida.append(",18: " + objl_cabeceraRC.getStrpv_regionPersonal());
		salida.append(",19: " + objl_doc.getObjpv_importePagar());
		salida.append(",20: " + strl_codMonOpe);
		salida.append(",21: " + objl_doc.getObjpv_tipoCambio());

		// System.out.println(salida.toString());
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.setString(2, objl_cabeceraRC.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(3, objl_cabeceraRC.getStrpv_codigoRegion());
		objpv_cstmt.setString(4, objl_cabeceraRC
				.getStrpv_codigoTipoDocumentoAux());
		objpv_cstmt.setString(5, objl_cabeceraRC.getStrpv_serieAux());
		objpv_cstmt.setString(6, objl_cabeceraRC.getStrpv_numGenerado());
		objpv_cstmt.setString(7, objl_cabeceraRC.getStrpv_fechaEmision());

		objpv_cstmt.setString(8, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(9, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(10, objl_doc.getStrpv_codigoTipoDocumento());
		objpv_cstmt.setString(11, objl_doc.getStrpv_serieLogica());
		objpv_cstmt.setString(12, objl_doc.getStrpv_numeroLogico());
		objpv_cstmt.setString(13, objl_doc.getStrpv_codigoMoneda());
		objpv_cstmt.setBigDecimal(14, objl_doc.getObjpv_importe());
		objpv_cstmt.setString(15, objl_cabeceraRC.getStrpv_codigoCliente());
		objpv_cstmt.setString(16, objl_cabeceraRC.getStrpv_cobrador());

		objpv_cstmt.setString(17, objl_cabeceraRC.getStrpv_empresaPersonal());
		objpv_cstmt.setString(18, objl_cabeceraRC.getStrpv_regionPersonal());
		objpv_cstmt.setBigDecimal(19, objl_doc.getObjpv_importePagar());
		objpv_cstmt.setString(20, strl_codMonOpe);
		objpv_cstmt.setBigDecimal(21, objl_doc.getObjpv_tipoCambio());

		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosAplicacion(Documento objl_doc,
			ReciboIngresoCaja objl_RIC) throws SQLException {
		// System.out.println("fecha "+objl_RIC.getStrpv_fechaLiquidacion());
		// System.out.println("nr "+objl_RIC.getIntpv_numeroRIC());
		// System.out.println("dr "+objl_RIC.getIntpv_detalleRIC());
		// System.out.println("fr "+objl_RIC.getStrpv_secUnicoRIC());
		// System.out.println("sl "+objl_doc.getStrpv_serieLogica());
		// System.out.println("nl "+objl_doc.getStrpv_numeroLogico());

		StringBuffer salida = new StringBuffer();
		salida.append("configuraParametrosAplicacion : entrada ");
		salida.append(" 2: " + objl_doc.getStrpv_codigoEmpresa());
		salida.append(",3: " + objl_doc.getStrpv_codigoRegion());
		salida.append(",4: " + objl_doc.getStrpv_codigoTipoDocumento());
		salida.append(",5: " + objl_doc.getStrpv_serieLogica());
		salida.append(",6: " + objl_doc.getStrpv_numeroLogico());
		salida.append(",7: " + objl_RIC.getStrpv_codCliente());

		salida.append(",8: " + objl_RIC.getStrpv_fechaLiquidacion());
		salida.append(",9: " + objl_doc.getStrpv_codigoMoneda());
		salida.append(",10: " + objl_doc.getObjpv_importeSoles());
		salida.append(",11: " + objl_doc.getObjpv_importeDolares());
		salida.append(",12: " + objl_RIC.getStrpv_codCobradorEmp());
		salida.append(",13: " + objl_RIC.getStrpv_codCobradorDis());
		salida.append(",14: " + objl_RIC.getStrpv_codCobradorPer());

		salida.append(",15: " + objl_RIC.getStrpv_fechaLiquidacion());
		salida.append(",16: " + objl_RIC.getIntpv_numeroRIC());
		salida.append(",17: " + objl_RIC.getIntpv_detalleRIC());

		salida.append(",18: " + objl_RIC.getStrpv_secUnicoRIC());
		salida.append(",19: " + objl_RIC.getObjpv_tipoCambioDetalle());
		salida.append(",20: " + objl_RIC.getStrpv_codMoneda());
		salida.append(",21: " + objl_RIC.getStrpv_fechaLiquidacion());

		salida.append(",22: " + objl_RIC.getStrpv_codTipoDoc());
		salida.append(",23: " + objl_RIC.getStrpv_fechaDeposito());
		salida.append(",24: " + objl_doc.getObjpv_importePagar());
		salida.append(",25: " + objl_doc.getObjpv_tipoCambio());
		salida.append(",30: " + objl_RIC.getStrpv_serie());
		// System.out.println(salida.toString());
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.setString(2, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(3, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(4, objl_doc.getStrpv_codigoTipoDocumento());
		objpv_cstmt.setString(5, objl_doc.getStrpv_serieLogica());
		objpv_cstmt.setString(6, objl_doc.getStrpv_numeroLogico());
		objpv_cstmt.setString(7, objl_RIC.getStrpv_codCliente());
		objpv_cstmt.setString(8, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setString(9, objl_doc.getStrpv_codigoMoneda());
		objpv_cstmt.setBigDecimal(10, objl_doc.getObjpv_importeSoles());
		objpv_cstmt.setBigDecimal(11, objl_doc.getObjpv_importeDolares());
		objpv_cstmt.setString(12, objl_RIC.getStrpv_codCobradorEmp());
		objpv_cstmt.setString(13, objl_RIC.getStrpv_codCobradorDis());
		objpv_cstmt.setString(14, objl_RIC.getStrpv_codCobradorPer());
		objpv_cstmt.setString(15, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setInt(16, objl_RIC.getIntpv_numeroRIC());
		objpv_cstmt.setInt(17, objl_RIC.getIntpv_detalleRIC());
		objpv_cstmt.setString(18, objl_RIC.getStrpv_secUnicoRIC());// Long
		objpv_cstmt.setBigDecimal(19, objl_RIC.getObjpv_tipoCambioDetalle());
		objpv_cstmt.setString(20, objl_RIC.getStrpv_codMoneda());
		objpv_cstmt.setString(21, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setString(22, objl_RIC.getStrpv_codTipoDoc());
		objpv_cstmt.setString(23, objl_RIC.getStrpv_fechaDeposito());
		objpv_cstmt.setBigDecimal(24, objl_doc.getObjpv_importePagar());
		objpv_cstmt.setBigDecimal(25, objl_doc.getObjpv_tipoCambio());// duda
		objpv_cstmt.setString(26, objl_RIC.getStrpv_serie());
		// Usuario que realiza aplicacion
		objpv_cstmt.setString(27, objl_RIC.getStrpv_usuario());
		objpv_cstmt.registerOutParameter(28, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(29, OracleTypes.NUMBER);
		return objpv_cstmt;
	}

	private CallableStatement configuraParametrosAplicacionCAASA(
			Documento objl_doc, ReciboIngresoCaja objl_RIC) throws SQLException {
		// System.out.println("fecha "+objl_RIC.getStrpv_fechaLiquidacion());
		// System.out.println("nr "+objl_RIC.getIntpv_numeroRIC());
		// System.out.println("dr "+objl_RIC.getIntpv_detalleRIC());
		// System.out.println("numero ric "+objl_RIC.getStrpv_secUnicoRIC());
		// System.out.println("sl del doc "+objl_doc.getStrpv_serieLogica());
		// System.out.println("nl del doc "+objl_doc.getStrpv_numeroLogico());

		StringBuffer salida = new StringBuffer();
		salida.append("configuraParametrosAplicacionCAASA : entrada ");
		salida.append(" 2: " + objl_doc.getStrpv_codigoEmpresa());
		salida.append(",3: " + objl_doc.getStrpv_codigoRegion());
		salida.append(",4: " + objl_doc.getStrpv_codigoTipoDocumento());
		salida.append(",5: " + objl_doc.getStrpv_serieLogica());
		salida.append(",6: " + objl_doc.getStrpv_numeroLogico());
		salida.append(",7: " + objl_RIC.getStrpv_codCliente());

		salida.append(",8: " + objl_RIC.getStrpv_fechaLiquidacion());
		salida.append(",9: " + objl_doc.getStrpv_codigoMoneda());
		salida.append(",10: " + objl_doc.getObjpv_importeSoles());
		salida.append(",11: " + objl_doc.getObjpv_importeDolares());
		salida.append(",12: " + objl_RIC.getStrpv_codCobradorEmp());
		salida.append(",13: " + objl_RIC.getStrpv_codCobradorDis());
		salida.append(",14: " + objl_RIC.getStrpv_codCobradorPer());

		salida.append(",15: " + objl_RIC.getStrpv_fechaLiquidacion());
		salida.append(",16: " + objl_RIC.getIntpv_numeroRIC());
		salida.append(",17: " + objl_RIC.getIntpv_detalleRIC());

		salida.append(",18: " + objl_RIC.getStrpv_secUnicoRIC());
		salida.append(",19: " + objl_RIC.getObjpv_tipoCambioDetalle());
		salida.append(",20: " + objl_RIC.getStrpv_codMoneda());
		salida.append(",21: " + objl_RIC.getStrpv_fechaLiquidacion());

		salida.append(",22: " + objl_RIC.getStrpv_codTipoDoc());
		salida.append(",23: " + objl_RIC.getStrpv_fechaDeposito());
		salida.append(",24: " + objl_RIC.getObjpv_importePagado());
		salida.append(",25: " + objl_RIC.getObjpv_tipoCambioDetalle());
		salida.append(",26: " + objl_RIC.getStrpv_serie());

		// System.out.println("-----------------------------------------------------------------------");
		// System.out.println(salida.toString());
		// System.out.println("-----------------------------------------------------------------------");

		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.setString(2, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(3, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(4, objl_doc.getStrpv_codigoTipoDocumento());
		objpv_cstmt.setString(5, objl_doc.getStrpv_serieLogica());
		objpv_cstmt.setString(6, objl_doc.getStrpv_numeroLogico());
		objpv_cstmt.setString(7, objl_RIC.getStrpv_codCliente());
		objpv_cstmt.setString(8, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setString(9, objl_doc.getStrpv_codigoMoneda());
		objpv_cstmt.setBigDecimal(10, objl_doc.getObjpv_importeSoles());
		objpv_cstmt.setBigDecimal(11, objl_doc.getObjpv_importeDolares());
		objpv_cstmt.setString(12, objl_RIC.getStrpv_codCobradorEmp());
		objpv_cstmt.setString(13, objl_RIC.getStrpv_codCobradorDis());
		objpv_cstmt.setString(14, objl_RIC.getStrpv_codCobradorPer());
		objpv_cstmt.setString(15, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setInt(16, objl_RIC.getIntpv_numeroRIC());
		objpv_cstmt.setInt(17, objl_RIC.getIntpv_detalleRIC());
		objpv_cstmt.setString(18, objl_RIC.getStrpv_secUnicoRIC());
		objpv_cstmt.setBigDecimal(19, objl_RIC.getObjpv_tipoCambioDetalle());
		objpv_cstmt.setString(20, objl_RIC.getStrpv_codMoneda());
		objpv_cstmt.setString(21, objl_RIC.getStrpv_fechaLiquidacion());
		objpv_cstmt.setString(22, objl_RIC.getStrpv_codTipoDoc());
		objpv_cstmt.setString(23, objl_RIC.getStrpv_fechaDeposito());
		objpv_cstmt.setBigDecimal(24, objl_RIC.getObjpv_importePagado());
		objpv_cstmt.setBigDecimal(25, objl_RIC.getObjpv_tipoCambioDetalle());// duda
		objpv_cstmt.setString(26, objl_RIC.getStrpv_serie());
		// Usuario que realiza aplicacion
		objpv_cstmt.setString(27, objl_RIC.getStrpv_usuario());
		objpv_cstmt.registerOutParameter(28, OracleTypes.NUMBER);
		objpv_cstmt.registerOutParameter(29, OracleTypes.NUMBER);
		return objpv_cstmt;
	}

	private CallableStatement cancelarRC(Documento objl_doc)
			throws SQLException {
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		objpv_cstmt.setString(2, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(3, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(4, objl_doc.getStrpv_codigoTipoDocumentoAux());
		objpv_cstmt.setString(5, objl_doc.getStrpv_serieAux());
		objpv_cstmt.setString(6, objl_doc.getStrpv_numGenerado());

		return objpv_cstmt;
	}

	private CallableStatement configurarCancelarDetalleRC(
			Documento objl_docDetalle, Documento objl_doc) throws SQLException {
		objpv_cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
		StringBuffer salida = new StringBuffer();
		salida.append("configurarCancelarDetalleRC : entrada ");
		salida.append(" 2: " + objl_doc.getStrpv_codigoEmpresa());
		salida.append(",3: " + objl_doc.getStrpv_codigoRegion());
		salida.append(",4: " + objl_doc.getStrpv_codigoTipoDocumentoAux());
		salida.append(",5: " + objl_doc.getStrpv_serieAux());
		salida.append(",6: " + objl_doc.getStrpv_numGenerado());
		salida.append(",8: " + objl_docDetalle.getStrpv_codigoEmpresa());
		salida.append(",9: " + objl_docDetalle.getStrpv_codigoRegion());
		salida.append(",10: " + objl_docDetalle.getStrpv_codigoTipoDocumento());
		salida.append(",11: " + objl_docDetalle.getStrpv_serieLogica());
		salida.append(",12: " + objl_docDetalle.getStrpv_numeroLogico());
		// System.out.println(salida.toString());
		objpv_cstmt.setString(2, objl_doc.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(3, objl_doc.getStrpv_codigoRegion());
		objpv_cstmt.setString(4, objl_doc.getStrpv_codigoTipoDocumentoAux());
		objpv_cstmt.setString(5, objl_doc.getStrpv_serieAux());
		objpv_cstmt.setString(6, objl_doc.getStrpv_numGenerado());
		objpv_cstmt.setString(7, objl_docDetalle.getStrpv_codigoEmpresa());
		objpv_cstmt.setString(8, objl_docDetalle.getStrpv_codigoRegion());
		objpv_cstmt
				.setString(9, objl_docDetalle.getStrpv_codigoTipoDocumento());
		objpv_cstmt.setString(10, objl_docDetalle.getStrpv_serieLogica());
		objpv_cstmt.setString(11, objl_docDetalle.getStrpv_numeroLogico());

		return objpv_cstmt;
	}

}
